import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
from WindPy import w


code_to_name = {
    'IBOVESPA.GI':'巴西圣保罗指数',
    'DJI.GI':'道琼斯指数',
    'IXIC.GI':'纳斯达克指数',
    'SPX.GI':'标普500指数',
    'FTSE.GI':'英国富时100指数',
    'FCHI.GI':'法国CAC40指数',
    'GDAXI.GI':'德国DAX指数',
    'N225.GI':'日经225指数',
    'KS11.GI':'韩国综合指数',
    'HSI.HI':'香港恒生指数',
    'AS51.GI':'澳大利亚标普200指数',
    '000001.SH':'上证指数',
    '399001.SZ':'深证成指',
    'TWII.TW':'台湾加权指数',
}

w.start() # 默认命令超时时间为120秒，如需设置超时时间可以加入waitTime参数，例如waitTime=60,即设置命令超时时间为60秒 

w.isconnected() # 判断WindPy是否已经登录成功

data = w.wsd(
    "IBOVESPA.GI,DJI.GI,IXIC.GI,SPX.GI,FTSE.GI,FCHI.GI,GDAXI.GI,N225.GI,KS11.GI,HSI.HI,AS51.GI,000001.SH,399001.SZ,TWII.TW", 
    "close", 
    "2024-09-23", 
    "2025-05-18", 
    "Period=W;PriceAdj=F"
    )

df = pd.DataFrame(
    data.Data, 
    )
df.index = data.Codes
df.columns = data.Times
df = df.T

df_cn = df.copy()
df_cn.columns = [code_to_name[code] for code in df_cn.columns]

df_ratio = df_cn.div(df_cn.iloc[0], axis=1) * 100
df_yoy_from_924 = df_ratio - 100
df_yoy_from_924 = df_yoy_from_924.round(2)


# 创建折线图
fig = px.line(
    df_yoy_from_924, title='全球主要股票市场指数收益率走势'
    ).update_layout(
        xaxis_title='date',
        yaxis_title='924以来收益率'
    )



# 获取最后一个交易日的收益率
last_date = df_yoy_from_924.index[-1]
last_values = df_yoy_from_924.iloc[-1]

# 添加注释
for i, col in enumerate(df_yoy_from_924.columns):
    fig.add_annotation(
        x=last_date,
        y=last_values[i],
        text=f'{col}: {last_values[i]:.2f}%',
        showarrow=True,
        arrowhead=1,
        xshift=20 * (i % 3),
        yshift=20 * (i // 3),
        font=dict(size=12, color='black')
    )

# 保存为HTML文件
fig.write_html('全球主要股票市场指数收益率走势.html')
df_yoy_from_924.to_excel('全球主要股票市场指数收益率走势.xlsx')